import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

// 通过这个代码，往数据库的表中，插入一行记录
public class Demo1 {
    public static void main(String[] args) throws SQLException {

        Scanner scanner  = new Scanner(System.in);
        System.out.println("请输入学号：");
        int id = scanner.nextInt();
        System.out.println("请输入姓名：");
        String name = scanner.next();

        // 1. 创建一个 DataSource
        DataSource dataSource = new MysqlDataSource();  // 向上转型
        // 这里都是准备工作  还没有和  mysql 服务器进行通信
        // 设置 url 让程序知道 mysql服务器在哪
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        // 设置 用户  和  密码   用来登录
        ((MysqlDataSource) dataSource).setUser("root"); // 向下转型
        ((MysqlDataSource) dataSource).setPassword("123456");

        // 2. 建立和数据库之间的连接，连接好了之后，才能进行后续的  请求-响应  交互
        Connection connection = dataSource.getConnection();

        // 3. 构造 sql    之后想要 其他的操作  直接修改这里的 sql 即可
//        String sql = "insert into student values(1,'张三')"; // 这样写的 sql 太麻烦


        // 这种写法 是拼接字符串的 sql 其中的 id  和 name 是用户输入的
        // 有可能会导致 sql注入攻击（sql 注入攻击 就是 用户在输入的时候并没有正确输入 而是输入的带有其他的 sql）
//        String sql = "insert into student values("+id+",'"+name+"')";

        String sql = "insert into student values(?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);
        // 4. 把 sql 发送给数据库服务器  返回一个整数 表示影响到的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        // 5. 释放资源，关闭连接  释放顺序 后获取到的资源  先释放
        statement.close();
        connection.close();
    }
}
